package com.vhans.db.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.vhans.core.web.model.vo.RecordSearchVO;
import com.vhans.core.domain.BRecord;
import com.vhans.db.model.dto.ConditionDTO;
import com.vhans.db.model.dto.DeleteDTO;
import com.vhans.db.model.dto.RecommendDTO;
import com.vhans.db.model.dto.TopDTO;
import com.vhans.db.model.dto.record.RecordDTO;
import com.vhans.db.model.vo.record.*;
import org.springframework.web.multipart.MultipartFile;

import java.util.List;

/**
 * 记录业务接口
 *
 * @author vhans
 **/
public interface IBRecordService extends IService<BRecord> {

    /**
     * 查看记录列表
     *
     * @param condition 条件
     * @return 记录列表
     */
    List<RecordVO> listRecordVO(ConditionDTO condition);

    /**
     * 添加记录
     *
     * @param record 记录
     */
    void addRecord(RecordDTO record);

    /**
     * 删除记录
     *
     * @param recordIdList 记录id
     */
    void deleteRecord(List<Integer> recordIdList);

    /**
     * 回收或恢复记录
     *
     * @param delete 逻辑删除
     */
    void updateRecordDelete(DeleteDTO delete);

    /**
     * 修改记录
     *
     * @param record 记录
     */
    void updateRecord(RecordDTO record);

    /**
     * 编辑记录
     *
     * @param recordId 记录id
     * @return 记录
     */
    RecordInfoVO editRecord(Integer recordId);

    /**
     * 修改记录置顶状态
     *
     * @param top 置顶
     */
    void updateRecordTop(TopDTO top);

    /**
     * 修改记录推荐状态
     *
     * @param recommend 推荐
     */
    void updateRecordRecommend(RecommendDTO recommend);

    /**
     * 搜索记录
     *
     * @param keyword 关键字
     * @return 记录列表
     */
    List<RecordSearchVO> listRecordsBySearch(String keyword);

    /**
     * 查看首页记录列表
     *
     * @return 首页记录列表
     */
    List<RecordHomeListVO> listRecordHomeVO(String keyword);

    /**
     * 查看记录
     *
     * @param recordId 记录id
     * @return 记录
     */
    RecordHomeVO getRecordHomeById(Integer recordId);

    /**
     * 查看记录总览
     *
     * @return 记录总览
     */
    List<RecordOverviewVO> listRecordOverviewVO();

    /**
     * 查看推荐记录
     *
     * @return 推荐记录
     */
    List<RecordRecommendVO> listRecordRecommendVO();

    /**
     * 收藏记录
     *
     * @param recordId 记录id
     */
    void collectRecord(Integer recordId);

    /**
     * 上传记录图片
     *
     * @param file 文件
     * @return 记录图片地址
     */
    String saveRecordImages(MultipartFile file);

    /**
     * 上传记录视频
     *
     * @param file 文件
     * @return 记录视频地址
     */
    String saveRecordVideo(MultipartFile file);
}
